Decidí crear un script de usuario para el chat en vivo de YouTube. Aquí está el código:
const toString = Function.prototype.toString unsafeWindow.setTimeout = function (fn, t, ...args) { unsafeWindow.console.log(fn, fn.toString(), toString.call(fn)) unsafeWindow.fns = (unsafeWindow.fns ?? []).concat(fn) return setTimeout(fn, t, ...args) }
Ahora mira cómo se ve la salida:
El resultado de algunas de las funciones es predecible, ¡pero mire las otras! Cuando simplemente lo haga console.log
, verá el cuerpo de la función, pero si llama a fn.toString()
, verá function () { [native code] }
.
¿Pero por qué? El script se carga antes que la página, por lo que los scripts de YouTube no pueden reemplazar los métodos.